package firewall;

import java.util.Map;
import java.util.HashMap;

public class ReglaEspecificaIp extends Regla {

	private long ip;
	private Map<Integer, Integer> diccionarioIpsOrigen = new HashMap<Integer, Integer>();//Declara diccionario con par puerto-ip para el caso en el que un puerto es para una determinada ip.
	private Map<Integer, Integer> diccionarioIpsDestino = new HashMap<Integer, Integer>();
	
	public void setIp(String ip){
		this.ip= Long.parseLong(ip.replaceAll("\\D", ""));
	}
	
	public long getIp(){
		return (this.ip);
	}
	
	public void agregarAlDiccionarioOrigen(String ip, int puerto){
		
		this.diccionarioIpsOrigen.put(Integer.parseInt(ip),puerto);
		
	}
	public void removerDelDiccionarioOrigen(String ip){
		this.diccionarioIpsOrigen.remove(Integer.parseInt(ip));
		
	}

	public void agregarAlDiccionarioDestino(String ip, int puerto){
		
		this.diccionarioIpsDestino.put(Integer.parseInt(ip),puerto);
		
	}
	public void removerDelDiccionarioDestino(String ip){
		this.diccionarioIpsDestino.remove(Integer.parseInt(ip));
		
	}
	
	public boolean matchea(Paquete paquete){
		boolean negar = false;
		if (this.diccionarioIpsOrigen.containsKey(paquete.getIpOrigen()) ){
			if (this.diccionarioIpsOrigen.get(paquete.getIpOrigen()) == paquete.getPuerto()){
				negar = true;
			};
					
		};
		if (this.diccionarioIpsDestino.containsKey(paquete.getIpDestino()) ){
			if (this.diccionarioIpsDestino.get(paquete.getIpDestino()) == paquete.getPuerto()){
				negar = true;
			};
					
		};
		
		
		return (paquete.getIpDestino() == this.ip || paquete.getIpOrigen() == this.ip || negar); 
		
	}
}
